#include<iostream>
#include<string>//          string是给getline读取使用的
using namespace std;
int main() {
    /*ACM省赛是学长们大展拳脚的舞台，比赛的看点之一就是各队的队名五花八门，有的队名象绕口令，
    有的队名采用各种难懂的符号，有的队名含情脉脉，在颁奖时，主持的小姐姐在念获奖队名的时候，
    时而微笑，时而羞涩，时而皱眉头，组委会于是决定规范队名，如果长度超过指定的长度n,
    先截取前n个字符作为队名，如果队名中包括字母、数字、空格之外的字符，将会被退回修改。
输入
 第一行输入两个整数m,n, 分别表示队伍的数据和限定队名的长度。
    接着输入m行字符串，每行为一个提交的队伍的名字。

输出
输出被退回修改的队伍数量*/
    int m, n;
    cin >> m >> n;
    cin.ignore();//                用来给getline消除上一行cin残留的换行符
    int count = 0;
    for (int i = 0; i < m; i++) {
        string c;
        getline(cin, c);//          getline(cin,字符串名称)跟cin等价，不过能读取空格
        if (c.length() > n)c = c.substr(0, n); //          c.substr(开始,结束)相当于子字符串，从c中截取一段
        bool ok = true;//                               使用bool判断是否合法
        for (int j = 0; j < c.length(); j++) {
            if (!((c[j] >= 'a' && c[j] <= 'z') || (c[j] >= 'A' && c[j] <= 'Z') || (c[j] >= '0' && c[j] <= '9') || (c[j] == ' '))) {//          多个条件时，每个条件用()括起来；表示否定时，前面加！；
                ok = false;
                break;//            如果出现非法字符，检索该队名的过程终止；
            }
            
            
        }
        if (!ok)count++;//              将判断转为数量的核心
    }
    
    cout << count;
    return 0;

}